package com.java.generic;

import java.util.ArrayList;

/**
 * 泛型引入：泛型为什么出现
 */
public class IntroduceGeneric {
    public static void main(String[] args) {
        // 无泛型约束时可添加任意类型的元素到集合，所有被添加的元素都被认为是Object
        ArrayList list1 = new ArrayList();
        list1.add("SYX");
        list1.add(20);
        list1.add(true);
        
        // 添加到集合的元素都被认为是Object自然无法使用子类特有方法，想要使用子类特有方法只能通过强转
        Object object = list1.get(0);
        String string1 = (String) list1.get(0);
        Integer integer = (Integer) list1.get(1);
        Boolean bool = (Boolean) list1.get(2);
        
        // 强转前必须确定集合内该元素原本以何种类型存储，若是集合内元素非常多非常杂，那么手动强转的方式非常不方便且易出错
        
        // 泛型可约定添加到集合内元素的数据类型，并且在获取元素前自动强转
        ArrayList<String> list2 = new ArrayList();
        list2.add("SYX"); // 编译阶段进行泛型约束检查，满足泛型要求才可编译成功
        // list2.add(20); // 需要的类型String
        String string2 = list2.get(0);
    }
}
